/**
 * @file gameserverwidget.h
 * @brief 游戏服务器界面组件头文件 - 游戏服务器管理的UI界面
 *
 * GameServerWidget是游戏服务器管理的主要UI组件，提供：
 * - 服务器列表的显示和筛选功能
 * - 服务器详细信息的展示
 * - 游戏加入和连接功能
 * - 分页浏览和自动刷新
 * - 实时状态监控和统计显示
 * - 现代化的UI设计和交互体验
 */

#ifndef GAMESERVERWIDGET_H
#define GAMESERVERWIDGET_H

#include <QWidget>          // Qt基础窗口组件
#include <QTableWidget>     // 表格组件
#include <QComboBox>        // 下拉框组件
#include <QPushButton>      // 按钮组件
#include <QLabel>           // 标签组件
#include <QProgressBar>     // 进度条组件
#include <QTimer>           // 定时器组件
#include <QVBoxLayout>      // 垂直布局
#include <QHBoxLayout>      // 水平布局
#include <QGroupBox>        // 分组框组件
#include <QHeaderView>      // 表头视图
#include <QSplitter>        // 分割器组件
#include <QTextEdit>        // 文本编辑器
#include <QFrame>           // 框架组件
#include "gameservice.h"
#include "authservice.h"

/**
 * @class GameServerWidget
 * @brief 游戏服务器管理界面组件
 *
 * 提供完整的游戏服务器管理界面，包括：
 * - 服务器列表的展示和筛选
 * - 服务器详细信息的显示
 * - 游戏连接和会话管理
 * - 分页浏览和自动刷新功能
 * - 实时状态统计和监控
 */
class GameServerWidget : public QWidget
{
    Q_OBJECT  // 启用Qt元对象系统

public:
    explicit GameServerWidget(GameService *gameService, AuthService *authService, QWidget *parent = nullptr);
    virtual ~GameServerWidget();

    // 游戏服务管理
    void setGameService(GameService *gameService);
    
    // 服务器信息获取
    GameService::GameServer getSelectedServer() const;

signals:
    void gameJoinRequested(const QString &gameType);
    void snakeGameConnectionReady(const GameService::GameLoginResult &result);

private slots:
    void onRefreshClicked();
    void onJoinClicked();
    void onCreateRoomClicked();        // 新增：创建房间槽函数
    void onFilterChanged();
    void onGameServersReceived(const QList<GameService::GameServer> &servers, const GameService::ServerSummary &summary);
    void onGameJoinSucceeded(const GameService::GameLoginResult &result);
    void onGameJoinFailed(const QString &error);
    void onRequestFailed(const QString &error);
    void onAutoRefreshTimer();
    void onServerSelectionChanged();
    void onGameTypeChanged();
    // onDiscoveryModeChanged方法已删除
    
    // 新的服务发现API相关槽函数
    void onGameServicesDiscovered(const QList<GameServiceInfo> &services, const QString &gameType, const QJsonObject &queryInfo);
    void onServiceDiscoveryError(const QString &error, const QString &errorCode);

    // 分页相关槽函数
    void onFirstPageClicked();
    void onPrevPageClicked();
    void onNextPageClicked();
    void onLastPageClicked();
    void onPageSizeChanged();

private:
    void setupUI();
    void setupFilters();
    void setupPagination();
    void connectGameService();  // 建立GameService信号槽连接
    void setupServerTable();
    void setupServerDetails();
    void setupStatusPanel();
    QWidget* createFilterWidget(const QString &label, const QString &objectName);
    void updateServerList(const QList<GameService::GameServer> &servers);
    void updateServerSummary(const GameService::ServerSummary &summary);
    void updateServerDetails(const GameService::GameServer &server);
    void updatePaginationControls();
    void setUIEnabled(bool enabled);
    void applyStyles();
    QString getServerStatusText(const QString &status);
    QColor getServerStatusColor(const QString &status);
    QString formatPlayerCount(int current, int max);
    QString formatLoadPercentage(double load);
    void updateStatusMessage(const QString &message, const QString &type = "info");
    void handleSnakeGameConnection(const GameService::GameLoginResult &result);
    void handleGenericGameConnection(const GameService::GameLoginResult &result);

    GameService *m_gameService;
    AuthService *m_authService;

    // 主布局
    QVBoxLayout *m_mainLayout;
    QSplitter *m_mainSplitter;

    // 过滤器区域
    QWidget *m_filterGroup;
    QHBoxLayout *m_filterLayout;
    QComboBox *m_gameTypeCombo;
    // m_regionCombo已删除
    QComboBox *m_statusCombo;
    QComboBox *m_healthyOnlyCombo;      ///< 健康状态筛选器（服务发现专用）
    // m_useServiceDiscoveryCombo已删除，默认使用服务发现
    QComboBox *m_sortByCombo;
    QPushButton *m_refreshButton;
    QPushButton *m_autoRefreshButton;

    // 分页控件
    QHBoxLayout *m_paginationLayout;
    QPushButton *m_firstPageButton;
    QPushButton *m_prevPageButton;
    QLabel *m_pageInfoLabel;
    QPushButton *m_nextPageButton;
    QPushButton *m_lastPageButton;
    QComboBox *m_pageSizeCombo;

    // 服务器列表
    QWidget *m_serverListGroup;
    QTableWidget *m_serverTable;
    QPushButton *m_joinButton;

    // 服务器详情
    QWidget *m_serverDetailsGroup;
    QTextEdit *m_serverDetailsText;

    // 状态面板
    QWidget *m_statusGroup;
    QLabel *m_totalServersLabel;
    QLabel *m_onlineServersLabel;
    QLabel *m_totalPlayersLabel;
    QLabel *m_statusLabel;
    QProgressBar *m_progressBar;

    // 定时器
    QTimer *m_autoRefreshTimer;
    QTimer *m_gameTypeChangeTimer;  // 游戏类型切换延迟定时器

    // 数据
    QList<GameService::GameServer> m_servers;
    GameService::ServerSummary m_summary;
    GameService::GameServer m_selectedServer;  // 当前选中的服务器

    // 样式
    QString m_primaryColor;
    QString m_secondaryColor;
    QString m_backgroundColor;
    QString m_textColor;
    QString m_errorColor;
    QString m_successColor;
    QString m_warningColor;

    // 状态
    bool m_autoRefreshEnabled;

    // 分页状态
    int m_currentPage;
    int m_totalPages;
    int m_pageSize;
};

#endif // GAMESERVERWIDGET_H
